/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.wisnu.scs.model;

import com.wisnu.scs.dao.DbBarangKeluarDao;
import com.wisnu.scs.entity.DbBarang;
import com.wisnu.scs.entity.DbBarangKeluar;
import com.wisnu.scs.error.ErrorMessage;
import com.wisnu.scs.event.DbBarangKeluarListener;
import com.wisnu.scs.util.HibernateUtil;
import java.util.Date;
import java.util.List;

/**
 *
 * @author Wisnu Wardoyo
 */
public class DbBarangKeluarModel {

    private Integer idKeluar;
    private Date tanggalKeluar;
    private String pemohon;
    private String keperluan;
    private Integer jumlah;
    private String keterangan;

    private DbBarang barang;
    private DbBarangKeluar barangKeluar;

    private String searchText;
    private Date firstDate;
    private List<Date> listDate;

    private DbBarangKeluarListener listener;

    public Integer getIdKeluar() {
        return idKeluar;
    }

    public Date getTanggalKeluar() {
        return tanggalKeluar;
    }

    public String getPemohon() {
        return pemohon;
    }

    public String getKeperluan() {
        return keperluan;
    }

    public Integer getJumlah() {
        return jumlah;
    }

    public String getKeterangan() {
        return keterangan;
    }

    public DbBarang getBarang() {
        return barang;
    }

    public DbBarangKeluar getBarangKeluar() {
        return barangKeluar;
    }

    public String getSearchText() {
        return searchText;
    }

    public Date getFirstDate() {
        return firstDate;
    }

    public List<Date> getListDate() {
        return listDate;
    }

    public void setListener(DbBarangKeluarListener listener) {
        this.listener = listener;
    }

    public void setIdKeluar(Integer idKeluar) {
        this.idKeluar = idKeluar;
        fireOnReset(this);
    }

    public void setTanggalKeluar(Date tanggalKeluar) {
        this.tanggalKeluar = tanggalKeluar;
        fireOnReset(this);
    }

    public void setPemohon(String pemohon) {
        this.pemohon = pemohon;
        fireOnReset(this);
    }

    public void setKeperluan(String keperluan) {
        this.keperluan = keperluan;
        fireOnReset(this);
    }

    public void setJumlah(Integer jumlah) {
        this.jumlah = jumlah;
        fireOnReset(this);
    }

    public void setKeterangan(String keterangan) {
        this.keterangan = keterangan;
        fireOnReset(this);
    }

    public void setBarang(DbBarang barang) {
        this.barang = barang;
    }

    public void setBarangKeluar(DbBarangKeluar barangKeluar) {
        this.barangKeluar = barangKeluar;
    }

    public void setSearchText(String searchText) {
        this.searchText = searchText;
        fireOnReset(this);
    }

    public void setFirstDate(Date firstDate) {
        this.firstDate = firstDate;
        fireOnReset(this);
    }

    public void setListDate(List<Date> listDate) {
        this.listDate = listDate;
    }

    protected void fireOnReset(DbBarangKeluarModel keluarModel) {
        if (listener != null) {
            listener.onReset(keluarModel);
        }
    }

    protected void fireOnInsert(DbBarangKeluar barangKeluar) {
        if (listener != null) {
            listener.onInsert(barangKeluar);
        }
    }

    protected void fireOnUpdate(DbBarangKeluar barangKeluar) {
        if (listener != null) {
            listener.onUpdate(barangKeluar);
        }
    }

    protected void fireOnDelete(DbBarangKeluar barangKeluar) {
        if (listener != null) {
            listener.onDelete(barangKeluar);
        }
    }

    protected void fireOnSearch(List<DbBarangKeluar> listBarangKeluar) {
        if (listener != null) {
            listener.onSearch(listBarangKeluar);
        }
    }

    public void resetForm() {
        setIdKeluar(0);
        setTanggalKeluar(new java.util.Date());
        setPemohon("");
        setKeperluan("");
        setJumlah(0);
        setKeterangan("");;
        setSearchText("");
        setFirstDate(new java.util.Date());
    }

    public void insertBarangKeluar() throws ErrorMessage {
        DbBarangKeluarDao barangKeluarDao = HibernateUtil.getBarangKeluarDao();

        DbBarangKeluar barangKeluar = new DbBarangKeluar();
        barangKeluar.setDbBarang(barang);
        barangKeluar.setTanggalKeluar(tanggalKeluar);
        barangKeluar.setPemohon(pemohon);
        barangKeluar.setKeperluan(keperluan);
        barangKeluar.setJumlah(jumlah);
        barangKeluar.setKeterangan(keterangan);

        barangKeluarDao.insertBarangKeluar(barangKeluar, barang);
        fireOnInsert(barangKeluar);
    }

    public void updateBarangKeluar() throws ErrorMessage {
        DbBarangKeluarDao barangKeluarDao = HibernateUtil.getBarangKeluarDao();

        DbBarangKeluar barangKeluar = new DbBarangKeluar();
        barangKeluar.setIdKeluar(idKeluar);
        barangKeluar.setDbBarang(barang);
        barangKeluar.setTanggalKeluar(tanggalKeluar);
        barangKeluar.setPemohon(pemohon);
        barangKeluar.setKeperluan(keperluan);
        barangKeluar.setJumlah(jumlah);
        barangKeluar.setKeterangan(keterangan);

        barangKeluarDao.updateBarangKeluar(barangKeluar, barang);
        fireOnUpdate(barangKeluar);
    }

    public void deleteBarangKeluar() throws ErrorMessage {
        DbBarangKeluarDao barangKeluarDao = HibernateUtil.getBarangKeluarDao();

        DbBarangKeluar barangKeluar = new DbBarangKeluar();
        barangKeluar.setIdKeluar(idKeluar);
        barangKeluar.setDbBarang(barang);
        barangKeluar.setTanggalKeluar(tanggalKeluar);
        barangKeluar.setPemohon(pemohon);
        barangKeluar.setKeperluan(keperluan);
        barangKeluar.setJumlah(jumlah);
        barangKeluar.setKeterangan(keterangan);

        barangKeluarDao.deleteKeluar(barangKeluar, barang);
        fireOnDelete(barangKeluar);
    }

    public void searchBarangKeluarByKeyWords() throws ErrorMessage {
        DbBarangKeluarDao barangKeluarDao = HibernateUtil.getBarangKeluarDao();
        fireOnSearch(barangKeluarDao.selectBarangKeluarByKeyWords(searchText));
    }

    public void searchBarangKeluarByDate() throws ErrorMessage {
        DbBarangKeluarDao barangKeluarDao = HibernateUtil.getBarangKeluarDao();
        fireOnSearch(barangKeluarDao.selectBarangKeluarByDate(searchText, firstDate));
    }

    public void searchBarangKeluarByMonth() throws ErrorMessage {
        DbBarangKeluarDao barangKeluarDao = HibernateUtil.getBarangKeluarDao();
        fireOnSearch(barangKeluarDao.selectBarangKeluarByDateRange(searchText, listDate));
    }

    public void searchBarangKeluarByDateRange() throws ErrorMessage {
        DbBarangKeluarDao barangKeluarDao = HibernateUtil.getBarangKeluarDao();
        fireOnSearch(barangKeluarDao.selectBarangKeluarByDateRange(searchText, listDate));
    }
}
